<script type="text/javascript"
     src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML">
</script>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<head>
    <link rel="stylesheet" href="stylesheet_TMATS.css">
</head>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<title>
    T-MATS: Help for Compressor Library Block
</title>

<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<body>
    <h1>
      T-MATS: Compressor Library Block
    </h1>
<hr>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="purpose">
        Purpose
</div>

<p>
    This block can be used to simulate the performance of a compressor using basic
thermodynamic equations, properties, and table-lookups.
</p>

<br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="background">
        Background
</div>

<p>
    This block utilizes the Compressor_TMATS.c script to compute the output gas characteristics
    and other variables.
</p>
<p>
    To compute the input enthalpy and entropy, the script uses a table-lookup
    method using the input temperature, pressure, and fuel to air ratio
    as reference values.
</p>
<p>
    A couple of values related to the fluid flow are then calculated using
    the following equations:

    $$\delta = \frac{Pt_{In}}{\textit{C_PSTD}}$$
    $$\Theta = \frac{Tt_{In}}{\textit{C_TSTD}}$$

    In the equations above, <i>C_PSTD</i> and <i>C_TSTD</i> are standard day
    conditions for pressure and temperature, respectively.
    Using the calculated values from these equations, the corrected flow
    can be determined by the following:

    $$Wc_{In} = W_{In}*\frac{\sqrt{\Theta}}{\delta}$$

    Likewise, the corrected shaft speed is determined by:

    $$Nc = \frac{Nmech}{\sqrt{\Theta}}$$
</p>

<p>
    General compressor performance is dictated by a compressor map that relates
    corrected shaft speed and an arbitrarily defined monotonically increasing Rline
    to corrected mass flow, pressure ratio, and efficiency. Values in this map may be scaled
    (for example 100% shaft speed might correlate to 20,000 rpm), so in this discussion all values
    taken from the map will be refered to as Map parameters. <br>
    The compressor speed map is determined by using the corrected shaft speed
    and the user-specified corrected speed scalar constant (<i>C_Nc</i>), as
    seen in the following equation:

    $$ NcMap = \frac{Nc}{\textit{C_Nc}} $$

    The value of <i>C_Nc</i> is dependant upon which iDesign (iDes) option
    is used.

</p>
<p>
    The iDes option can be accessed by double clicking the block, navigating
    to the iDesign tab, and entering 0, 1, or 2 for the option of <i>iDesign_M</i>.
    <ul>
        <li>If 0 is input, iDes will be enabled and the compressor map scalars (such as
        <i>C_Nc</i>) will be based on design variables specified by the user in
        the iDesign tab. These values are output to a specified file (<i>FVar_M</i>).
        <li>If 1 is input, the scalars will be determined from a specified
        file (<i>FVar_M</i>) that is uploaded by the user and specified in the iDesign tab.
        <li>If 2 is input, the scalars will be determined by the scalars specified in
        the C-Map tab (such as <i>s_C_Nc_M</i>); no values from the iDesign tab
        will be used.
    </ul>
    For more information on how to enable iDes and the different
    options for how to use it, see the Mask Variables table at the bottom of this page.

</p>
<p>
    To compute the total flow input, the script utilizes the user-specified compressor map,
    interpolates the results, and then scales the results using the user-specified
    flow scalar constant according to the following equation:

    $$ WcCalc_{In} = WcMap * \textit{C_Wc}$$

    The value of the flow scalar constant <i>C_Wc</i> is dependant
    upon which iDes option is used, as previously described and as detailed
    in the Mask Variable table at the bottom of this page.

</p>
<p>
    In order to determine the output total pressure, the pressure ratio that
    the compressor is operating at must first be determined. The pressure ratio is
    determined by the following equation:

    $$ PR = \textit{C_PR} * (PRMap - 1) +1 $$

    in which <i>PRMap</i> is determined by interpolating the compressor map
    and <i>C_PR</i> is dependant upon which iDes option is used.

    Once the pressure ratio is calculated, the total output pressure can be
    calculated using the following equation:

    $$Pt_{Out} = Pt_{In}*PR$$

</p>
<p>
    The overall efficiency of the compressor can be determined by the following
    equation:

    $$Eff = EffMap * \textit{C_Eff} $$

    in which <i>EffMap</i> is determined by interpolating the compressor map
    and <i>C_Eff</i> is dependant upon which iDes option is used.

</p>
<p>
    To compute the output total enthalpy, the script assumes that the compressor
    is isentropic such that input entropy is equal to output entropy. This allows
    for a table-lookup of the ideal total temperature using the entropy, pressure, and
    fuel to air ratio. An additional table-lookup is then done to determine the
    ideal total enthalpy using the ideal total temperature and fuel to air ratio.

    The final total enthalpy output is then determined using the following:

    $$ ht_{Out} = \frac{htIdeal_{Out} - ht_{In}}{Eff} +  ht_{In} $$

    The actual temperature output is then determined via a table-lookup using
    the actual total enthalpy and fuel to air ratio.

</p>
<p>
    The output flow is determined by the following equation:

    $$ W_{Out} = W_{In} - Wbleeds $$

    In the above equation, <i>Wbleeds</i> is the amount of flow that has left
    the system and can be determined in two ways. First,
    <i>Wbleeds</i> can be calculated based on user-specified customer bleeds (constant bleed value)
    and/or it can be calculated based on user-specified fractional bleeds.
    Multipule or none of these bleed flows can be specified by enabling or disabling these options.
</p>
<p>
    These two types of bleeds are determined by the following equations.
    In the code, the customer bleeds are evaluated first and then the
    fractional bleeds are evaluated and added to the customer bleed in order
    to determine the total flow that is bled off.
</p>
<p>
    Total bleed flow for the compressor is calculated by summing the specified flows:

    $$Wbleeds = \sum Wfrac + \sum Wcust$$

    In the above equation, <i>Wcust</i> are the values <i>C_CBD_M</i> (mask variable).
    The <i>Wfrac</i> values are the values <i>C_FBD_M</i> (mask variable) multiplied by input flow, <i>Win</i>.
</p>
<p>
    While computing the bleed, the script also calculates the total
    enthalpy and pressure that is lost due to each bleed. These values are
    determined by the following equations, respectively:

    $$htcust_{Out} = ht_{In} + FracBldht*(ht_{Out} - ht_{In})$$
    $$Ptcust_{Out} = Pt_{In} + FracBldPt*(Pt_{Out} -Pt_{In})$$

    In the above equations, <i>FracBldht</i> and <i>FracBldPt</i> refer
    to the fractional enthalpy and pressure gains by the flow before the bleed occurs.
    Although imperfect, these factional values are meant to simulate bleed at an internal stage.
    So, for example, if bleed occurs at stage 4 of an 8 stage compressor these fractional values might be 0.5.
    In addition to calculating the total enthalpy and total pressure for the
    bleed, the total temperature is determined by a table-lookup method using
    the total enthalpy as the search criteria.
</p>

<p>
    The output power is determined in a similar manner as the output flow.
    Like the output flow, the output power depends on both the input power
    and the amount of power bled off; the equation used to solve for the
    output power is below.

    $$Pwr_{Out} = Pwrb4bleed - PwrBld$$

    The ideal power stored in the system (<i>Pwrb4bleed</i>) is given by:

    $$ Pwrb4bleed = W_{In}*(ht_{in} - ht_{out})*\textit{C_BTU_PER_SECtoHP}$$

    in which <i>C_BTU_PER_SECtoHP</i> is the constant to convert BTU/s to HP.
</p>
<p>
    The power that bleeds from the system (<i>PwrBld</i>) is determined
    by sumation of the power that is bled off.

    $$PwrBld = \sum Wbld*(htbld_{Out}-ht_{Out})*\textit{C_BTU_PER_SECtoHP}$$
where <i>bld</i> variables are fractional and/or customer bleed values.
</p>
<p>
    The output torque to the shaft is determined by the output power and
    the shaft speed, as seen in the following equation:

    $$Torque_{Out} = \textit{C_HP_PER_RPMtoFT_LBF} * \frac{Pwr_{Out}}{Nmech}$$

    in which <i>C_HP_PER_RPMtoFT_LBF</i> is a constant used to convert the units.

</p>
<p>
    The computation of the normalized flow error depends on if iDes is enabled
    or not. If iDes is enabled, <i>NErrorOut</i> is determined by the following:

    $$NErrorOut = \frac{(Rline - RlineDes)}{Rline}$$

    In the above equation, the <i>Rline</i> values are determined from the
    user-specified compressor map. If iDes is disabled, <i>NErrorOut</i> is
    determined by:

    $$NErrorOut = \frac{(Wc_{In} - WcCalc_{In})}{Wc_{In}}$$

    <em>Note:</em> Divide by zero protection is implmented on these equations and if <i>Rline</i> is equal
    to zero, <i>NErrorOut</i> will be equal to 100. This will also occur if
    <i>Wc<sub>In</sub></i> is equal to zero.
</p>
<p>
    To determine the available stall margin, the following equation was used by default:

    $$SMavail = \frac{SPR - PR}{PR} * 100 $$

    in which

    $$SPR = \textit{C_PR}*(SPRMap -1)+1$$

    where <i>SPRMap</i> is determined by interpolating values on the compressor
    map and <i>C_PR</i> is dependant upon which iDes option is used. The stall margin map is then determined using the following:

    $$SMMap = \frac{SPRMap - PRMap}{PRMap} * 100$$
</p>
<p>
    The alternative definiton of stall margin (based on the distance of the
    operating point from the stall line by following a constant speed line
    instead of constant flow line) can be used by checking the appropriate
    box in the Surge Margin tab of the block mask. The following equation
    is used to compute this constant speed stall margin:

    $$SMavail = \Bigg(\frac{Wc / SWc}{PR / SPR} - 1\Bigg) * 100 $$

    In this definition, <i>SPR</i> and <i>SWc</i> are the pressure ratio
    and corrected mass flow obtained where the current speed line intersects with
    the stall line. These parameters are found via an iterative search
    process.

    The speed-based, map stall margin is calculated using the unscaled map
    data with the equation below:

    $$SMMap = \Bigg(\frac{WcMap / SWcMap}{PRMap / SPRMap} - 1\Bigg) * 100 $$
</p>
<p>
    For information on which output values are contained within the block outputs,
    see the Compressor Output table below.

<br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="instructions">
        Instructions
</div>

<p>
    To use this block:
    <ul>
        <li> Connect the input gas path flow, Rline, and Nmech values to the
        corresponding places on the block.
        <li> Connect the outputs to the next block(s) in your simulation.
        <li> Double click the block and...
        <ol>
            <li>Select which options you will use under each tab:
            <ul style="list-style-type:circle">
                <li>Under the C-Map tab:
                <ul>
                    <li>At the bottom of the page next to "Plot Map" button,
                    check the "Include surge line" box to plot the surge
                    line as defined in the Surge Margin tab. The surge line
                    will not be plotted otherwise.
                    <li>In the bottom-right corner of the page, select which
                    (if any) scalars you will use for the plot. <br> Options include:
                    <ol>
                        <li>None: Plots the maps as defined.
                        <li>User Defined: Plots the maps with Wc, PR, and Eff
                        scaled using the scalars defined in the C-Map tab.
                        <li>iDesign: Plots the maps with Wc, PR, and Eff scaled
                        using the scalars calculated with iDesign, as defined
                        in the iDesign tab.
                    </ol>
                </ul>
                <li>Under the Bleeds tab:
                <ul>
                    <li>Check the first box to enable Customer Bleeds. These
                    bleeds are based on the flow and the parameters you input.
                    <li>Check the second box to enable Fractional Bleeds. These
                    bleeds are based on fractional values that you input.
                </ul>
                <li>Under the Surge Margin tab:
                <ul>
                    <li>Check the box to use the map default surge line.
                    <li>Uncheck the box to specify your own values to determine
                    the surge line.
                </ul>
                <li>Under the iDesign tab:
                <ul>
                    <li>Select the value of iDesign_M. <br>Options include:
                    <ul style="list-style-type:disc">
                        <li> 0: iDes will be enabled and the compressor map
                        scalars will be based on design variables specified
                        by the user in the iDesign tab.
                        <li> 1: Compressor map scalars will be determined
                        from a specified file (<i>FVar_M</i>) that is uploaded by
                        the user and specified in the iDesign tab.
                        <li> 2: Compressor map scalars will be determined
                        by the scalars specified in the C-Map tab; no values
                        from the iDesign tab will be used.
                    </ul>
                </ul>
            </ul>
            <li>Input the corresponding values for the parameters you have chosen
            to use.
        </ol>
    </ul>
</p>

<br><hr><br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="inputs">
        Compressor Inputs
</div>

<table>
    <tr><th> Input </th><th>Description</th></tr>
    <tr><td>GasPthCharIn</td><td>Gas Path Characteristics Input, 5x1 vector consisting of:
            <br>- W - Gas path flow [pps]
            <br>- ht - Enthalpy [BTU/lbm]
            <br>- Tt - Total Temperature [degR]
            <br>- Pt - Total Pressure [psia]
            <br>- FAR - Combusted Fuel to Air Ratio [frac]</td></tr>
    <tr><td>Rline</td><td>R-line, position on compressor map.
            <br>Determines pressure ratio, efficiency, and gas path flow.
            <br>The value for this variable will need to be solved for by driving
            flow error across the engine to zero.</td></tr>
    <tr><td>Nmech</td><td>Shaft speed [rpm]</td></tr>
    <tr><td>HP_Mods</td><td>Health Parameter Modifiers, 3x1 vector consisting of:
            <br>- WcMod - Wc gain [frac]
            <br>- PRMod - PR gain [frac]
            <br>- EffMod - Eff gain [frac]
            <br> these modifiers are typically defined as negaive fractional numbers, i.e. -0.01 is a 1% loss.
        <br> Note: this inport appears only if HP_M under Health Parameters in the mask is checked.</td></tr>
</table>

<br><br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="outputs">
        Compressor Outputs
</div>

<table>
    <tr><th> Output </th><th> Description </th></tr>
    <tr><td>CustBldsCharOut</td><td>Customer or flow based Bleeds Characteristics Output,
            <br>[5 x 1] bus/vector for each customer bleed (total #cbleeds *5 x 1)
            <br> consisting of the following repeating format:
            <br>- W - Gas path flow [pps]
            <br>- ht - Enthalpy [BTU/lbm]
            <br>- Tt - Total temperature [degR]
            <br>- Pt - Total pressure [psia]
            <br>- FAR - Combusted fuel to air ratio [frac]
            <br> This feature must be enabled, see Bleed tab variable (CBLDEN_M) definition.</td></tr>
    <tr><td>FBldsCharOut</td><td>Fractional Bleeds Characteristics Output,
            <br>[5 x 1] bus/vector for each fractional bleed (total #fbleeds *5 x 1)
            <br> consisting of the following repeating format:
            <br>- W - Gas path flow [pps]
            <br>- ht - Enthalpy [BTU/lbm]
            <br>- Tt - Total temperature [degR]
            <br>- Pt - Total pressure [psia]
            <br>- FAR - Combusted fuel to air ratio [frac]
            <br> This feature must be enabled, see Bleed tab variable (FBLDEN_M) definition.<br></td></tr>
    <tr><td>GasPthCharOut</td><td>Gas Path Characteristics Output, 5x1 bus/vector consisting of:
            <br>- W - Gas path flow [pps]
            <br>- ht - Enthalpy [BTU/lbm]
            <br>- Tt - Total Temperature [degR]
            <br>- Pt - Total Pressure [psia]
            <br>- FAR - Combusted Fuel to Air Ratio [frac]</td></tr>
    <tr> <td>NErr</td><td>Normalized Error [frac].
            <br>In a typical system, this will be driven to zero by an iterative solver. </td></tr>
    <tr><td>TrqOut</td><td>Compressor Torque Output (lbf*ft).
            <br>Negative value for a compressor.</td></tr>
    <tr><td>C_Data</td><td>Compressor internal calculation data, 18x1 bus/vector including:
            <br>- SMavail - Stall margin available [%]
            <br>- s_C_Nc - Corrected shaft speed map scalar value
            <br>- s_C_Wc - Corrected mass flow map scalar value
            <br>- s_C_PR - Pressure ratio map scalar value
            <br>- s_C_Eff - Efficiency ratio map scalar value
            <br>- Wcin - Corrected input mass flow [pps]
            <br>- Nc - Corrected shaft speed [rpm]
            <br>- PR - Pressure ratio
            <br>- NcMap - Corrected shaft speed from the compressor map
            <br>- WcMap - Corrected mass flow from the compressor map
            <br>- PRMap - Pressure ratio from the compressor map
            <br>- SurgePR - Presssure ratio for surge at current corrected mass flow
            <br>- Wbleeds - Mass flow being diverted to the bleeds [pps]
            <br>- Pwrb4bleeds - Power required to run compressor if there were no bleeds [hp]
            <br>- PwrBld - Bled off power [hp]
            <br>- Pwrout - Total output power [hp]
            <br>- SMMap - Stall margin based on map values [%]
            <br>- SPRMap - Stall pressure ratio from the map
            <br>- Test - Compressor internal calculation data
            <br>- Nmech - Mechanical shaft speed, from input [rpm]
            <br>- BlkNm - Block name as double. If required use char(BlkNm) to retrieve. </td></tr>
</table>

<br><br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class="maskvars">
        Compressor Mask Variables
</div>

<table>
    <tr><th> Mask Variable </th><th> Description </th></tr>
    <tr><td>X_C_RlineVec_M</td><td>Compressor map Rline vector(nx1)</td></tr>
    <tr><td>Y_C_Map_NcVec_M</td><td>Compressor map corrected speed vector(mx1)</td></tr>
    <tr><td>T_C_Map_WcArray_M</td><td>Compressor map flow array (Wc = f(Nc, Rline))(mxn)</td></tr>
    <tr><td>T_C_Map_PRArray_M</td><td>Compressor map pressure ratio array (PR = f(Nc, Rline))(mxn)</td></tr>
    <tr><td>T_C_Map_EffArray_M</td><td>Compressor map efficiency array (Eff = f(Nc, Rline))(mxn)</td></tr>
    <tr><td>s_C_Nc_M</td><td>Corrected speed scalar constant</td></tr>
    <tr><td>s_C_Wc_M</td><td>Corrected flow scalar constant</td></tr>
    <tr><td>s_C_PR_M</td><td>Pressure ratio scalar constant</td></tr>
    <tr><td>s_C_Eff_M</td><td>Efficiency scalar constant</td></tr>
    <tr><td>Plot Map</td><td>Plots the block defined map
            <br>
            <br> - Include surge line - plots the surge line as defined in the Surge Margin tab on the map
            <br>
            <br> - Scalars: none - plots maps as defined
            <br>
            <br> - Scalars: user defined - plots maps with Wc, PR, and Eff scaled using the scalars defined in the C-map tab
            <br>
            <br> - Scalars: iDesign - plots maps with Wc, PR, and Eff scaled using scalars calculated with iDesign and located within the file defined in the iDesign tab</td></tr>
    <tr><td>CBLDEN_M</td><td>Customer or flow based Bleed Enable [check - enabled]</td></tr>
    <tr><td>C_CBD_M</td><td>Customer or flow based Bleed Demand[pps](cbx1)</td></tr>
    <tr><td>C_CBFht_M</td><td>Customer or flow based Bleed Fractional enthalpy[frac](cbx1)</td></tr>
    <tr><td>C_CBFPt_M</td><td>Customer or flow based Bleed Fractional Total Pressure[frac](cbx1)</td></tr>
    <tr><td>FBLDEN_M</td><td>Fractional based Bleed Enable [check - enabled]</td></tr>
    <tr><td>C_FBD_M</td><td>Fractional Bleed Demand[frac](bx1)</td></tr>
    <tr><td>C_BFht_M</td><td>Engine Bleed Fractional enthalpy (bx1)[frac](bx1)</td></tr>
    <tr><td>C_BFPt_M</td><td>Engine Bleed Fractional Total Pressure (bx1)[frac](bx1)</td></tr>
    <tr><td>DefSMEn_M</td><td>Enable default surge margin
            <br>
            <br>Set - use SRline_M
            <br>
            <br>Un-set - define manually via X_C_Map_WcSurgeVec_M and T_C_Map_PRSurgeVec_M </td></tr>
    <tr><td>SMNEn_M</td><td>Enable alternative (constant speed) surge margin calculation [check - enabled]</td></tr>
    <tr><td>SRline_M</td><td>Rline defined as the surge line (typically defined as 1)</td></tr>
    <tr><td>X_C_Map_WcSurgeVec_M</td><td>Compensated flow surge vector (map value)(sx1)</td></tr>
    <tr><td>T_C_Map_PRSurgeVec_M</td><td>Surge line pressure ratio vector (map value)(sx1)</td></tr>
    <tr><td>iDesign_M</td><td> Design fork (0, 1, 2)
            <br>
            <br>0 - iDes Enabled, Calculate compressor map scalars based on design variables.
            <br>    When iDesign is set to 0, scalar constants from the Map tab will not be used.
            <br>    Scalars calculated will be saved in the specified file (<i>FVar_M</i>).
            <br>
            <br>1 - Scalar variables will be overwritten (mask Initialization) with
                    values from a specified file (<i>FVar_M</i>).
            <br>    When iDesign is set to 1, scalar constants from the Map tab and the Design values
                    from the iDesign tab will not be used.
            <br>
            <br>2 - Scalar variables from the map tab will be used as the map scalars.
            <br>    When iDesign is set to 2, scalar constants from the Map tab will be used; Design values
                    and file definitions from the iDesign tab will not be used. </td></tr>
    <tr><td>NcDes_M</td><td>Map Design Corrected Shaft Speed [rpm], design point speed used in map</td></tr>
    <tr><td>EffDes_M</td><td>Design Efficiency [frac], actual design point compressor efficiency</td></tr>
    <tr><td>PRDes_M</td><td>Design Pressure Ratio [frac], actual design point compressor PR</td></tr>
    <tr><td>RlineDes_M</td><td>Map Design Rline, design point Rline used in map</td></tr>
    <tr><td>FVar_M</td><td>File name for iDes Variables</td></tr>
    <tr><td>HP_M</td><td>Enable Health Parameter input (3x1 vector), checked enabled. </td></tr>
</table>
Notes: Vectors are the x and/or y axis to a table made of an array.
Scalars are used to "scale" the compressor map for off design compressors.<br>
cb = number of customer bleeds<br>
b = number of fractional bleeds<br>
<br><hr><br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->

<div class = "errors">
    Potential Errors
</div>
<p>
When using this block, you may receive one of the following errors/warnings. The table
below lists the errors/warnings that you may see and the reason why it is being displayed.
</p>
<table>
    <tr><th> Error/Warning </th><th>Description</th></tr>
    <tr><td>Error calculating:
            <ul>
                <li>WcMap
                <li>PRMap
                <li>EffMap
            </ul></td><td>Error appears if the table size does not match the axis vector lengths.</td></tr>
    <tr><td>Error calculating:
            <ul>
                <li>WcMap
                <li>PRMap
                <li>EffMap
                <li>1D SMWcVec
                <li>1D SMPRVec
                <li>2D SPR
                <li>SPR
            </ul></td><td>Error appears if the vectors are not large enough
            to interpolate. Vector definitions may need to be adjusted. This
            means the values are running off the map.</td></tr>
    <tr><td>Number of bleeds in compressor exceeds 100...</td><td>Error appears if
                the iterations significantly exceeds the maximum number of
                bleeds, indicating bad data.</td></tr>
</table>

<br><br>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
</body>